package org.dromara.common.core.utils.ip;

import cn.hutool.core.net.NetUtil;
import cn.hutool.http.HtmlUtil;
import org.dromara.common.core.utils.StringUtils;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;


/**
 * @Author 刘武贵
 * @Date 2024/8/15 22:00
 * @Description 功能描述：获取地址类
 */
@Slf4j
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class AddressUtils {

    /**
     * 未知地址
     */
    public static final String UNKNOWN = "XX XX";

    /**
     * 根据IP地址获取真实的地区信息
     *
     * @param ip 待查询的IP地址
     * @return 地区信息，如果无法获取则返回"未知"
     */
    public static String getRealAddressByIP(String ip) {
        // 检查IP地址是否为空
        if (StringUtils.isBlank(ip)) {
            return UNKNOWN;
        }
        // 将IPv6格式的本地回环地址转换为IPv4的"127.0.0.1"，并清理HTML标签
        ip = StringUtils.contains(ip, "0:0:0:0:0:0:0:1") ? "127.0.0.1" : HtmlUtil.cleanHtmlTag(ip);
        // 检查是否为内网IP地址
        if (NetUtil.isInnerIP(ip)) {
            return "内网IP";
        }
        // 使用RegionUtils工具类根据IP地址获取地区信息
        return RegionUtils.getCityInfo(ip);
    }
}
